/*
 * Copyright (C) 2025 ameise <ameise.wang@gmail.com> - All Rights Reserved
 *
 * This file is part of e3time.
 *
 * e3time is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * e3time is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with e3time. If not, see <https://www.gnu.org/licenses/>.
 */

package e3time

func NewTimerHolder(args ...TimerHolder) TimerHolder {
	var phd TimerHolder
	phd = _gHoldGen
	if args != nil && args[0] != nil {
		phd = args[0]
	}
	return newTimerHolder(phd)
}

func NewTimer(cb TimerHandler, ctx any, dur Duration) Timer {
	return _gHoldGen.NewTimer(cb, ctx, dur)
}

func NewTimerWithDoTime(cb TimerHandler, ctx any, fireAt Time) Timer {
	return _gHoldGen.NewTimerWithDoTime(cb, ctx, fireAt)
}

func NewTick(cb TimerHandler, ctx any, dur Duration, repeat int) Timer {
	return _gHoldGen.NewTick(cb, ctx, dur, repeat)
}

func NewTickWithFirstAt(cb TimerHandler, ctx any, fireAt Time, dur Duration, repeat int) Timer {
	return _gHoldGen.NewTickWithFirstAt(cb, ctx, fireAt, dur, repeat)
}

func KillTimer(tr Timer) {
	_gHoldGen.KillTimer(tr)
}

func KillTimerWithID(id uint64) {
	_gHoldGen.killWithID(id)
}
